package com.wangjie.stackandqueue;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 225. 用队列实现栈
 *
 * @author jieshao
 * @date 2022/5/6 18:10
 */
public class QueueImpStack {
    Queue<Integer> queue = new LinkedList<>();
    // 记录栈顶元素
    int top_elem = 0;

    /**
     * 添加元素到栈顶
     *
     * @param x
     */
    public void push(int x) {
        // x 是队列的队尾，是栈的栈顶
        queue.offer(x);
        top_elem = x;
    }

    /**
     * 删除栈顶元素并返回
     *
     * @return
     */
    public int pop() {
        int size = queue.size();
        // 留下队尾 2 个元素
        while (size > 2) {
            queue.offer(queue.poll());
            size--;
        }
        // 记录新的队尾元素
        top_elem = queue.peek();
        queue.offer(queue.poll());
        // 删除之前的队尾元素
        return queue.poll();
    }

    /**
     * 返回栈顶元素
     *
     * @return
     */
    public int top() {
        return top_elem;
    }

    /**
     * 判断栈是否为空
     *
     * @return
     */
    public boolean empty() {
        return queue.isEmpty();
    }
}